package client;

import beans.BlockBean;
import block.Blockchain;
import utils.PrintAllBlock;

import java.util.ArrayList;

/**
 * @author:zhengyilong
 * @email:1797344574@qq.com
 * @phone:13479394730
 * @desc:
 * @DateTime:2022/5/15 15:44
 **/

/*确定系统有哪些功能，需要哪些参数
编译时：javac -encoding UTF-8 Main.java
a.创建带有创世区块的区块链，参数：有 1个 创世区块的交易信息
java Main createchain 区块信息
b.向区块链中中添加区块，参数：有 1个 添加区块的交易信息
java Main addblock 区块信息
c.打印所有区块信息	，参数： 无
java Main printblocks
d.获取当前区块链中区块的个数，参数：无
java Main getblockcount
e.输出当前系统的使用说明，参数：无
java Main help
注意：交易信息不可为中文
*/
public class Client {
    public static void Run(String[] args){
        //获取到用户出入的方法名，如果不输入会抛出数组越界异常，对其进行捕获并处理
        String method;
        try {
            method = args[0];
        }catch (Exception e){
            System.out.println("请输入方法名");
            return;
        }
        if (args.length>2){
            System.out.println("格式错误");
            return;
        }
        String data = null;
        switch (method){
            case "createchain":
                try {
                    data = args[1];
                }catch (Exception e){
                    System.out.println("请输入交易信息");
                    return;
                }
                createchain(data);
                break;
            case "addblock":
                try {
                    data = args[1];
                }catch (Exception e){
                    System.out.println("请输入交易信息");
                    return;
                }
                addblock(data);
                break;
            case "printblocks":
                printblocks();
                break;
            case "getblockcount":
                getblockcount();
                break;
            case "help":
                help();
                break;
            default:
                System.out.println("该方法不存在");
        }
    }

    private static void createchain(String data){
        Blockchain.NewBlockchain(data);
        System.out.println("创建区块链成功");
    }

    private static void addblock(String data){
        Blockchain.AddBlock(data);
        System.out.println("添加区块成功");
    }

    private static void printblocks(){
        PrintAllBlock.printAllBlock();
    }

    private static void getblockcount(){
        ArrayList<BlockBean> blocks = Blockchain.GetAllBlock();
        System.out.println(blocks.size());
    }

    private static void help(){
        System.out.println("a.创建带有创世区块的区块链，参数：有 1个 创世区块的交易信息\n" +
                "java Main createchain 区块信息\n" +
                "b.向区块链中中添加区块，参数：有 1个 添加区块的交易信息\n" +
                "java Main addblock 区块信息\n" +
                "c.打印所有区块信息\t，参数： 无\n" +
                "java Main printblocks\n" +
                "d.获取当前区块链中区块的个数，参数：无\n" +
                "java Main getblockcount\n" +
                "e.输出当前系统的使用说明，参数：无\n" +
                "java Main help\n"+
                "注意：交易信息不可为中文");
    }
}

